﻿//34. 在排序数组中查找元素的第一个和最后一个位置
//给你一个按照非递减顺序排列的整数数组 nums，和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
//如果数组中不存在目标值 target，返回[-1, -1]。
//你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

class Solution {
public:
    int searchleft(vector<int>& nums, int target)
    {
        int begin = 0, end = nums.size() - 1;
        int mid = (begin + end) / 2;
        while (begin <= end)
        {
            mid = (begin + end) / 2;
            if (nums[mid] < target)
            {
                begin = mid + 1;
            }
            else
            {
                end = mid - 1;
            }
        }
        return begin;
    }
    int searchright(vector<int>& nums, int target)
    {
        int begin = 0, end = nums.size() - 1;
        int mid = (begin + end) / 2;
        while (begin <= end)
        {
            mid = (begin + end) / 2;
            if (nums[mid] > target)
            {
                end = mid - 1;
            }
            else
            {
                begin = mid + 1;
            }
        }
        return end;
    }

    vector<int> searchRange(vector<int>& nums, int target)
    {
        int left = searchleft(nums, target);
        int right = searchright(nums, target);
        if (left <= right && nums[left] == target && nums[right] == target)
        {
            return { left, right };
        }
        else
        {
            return { -1, -1 };
        }
    }
};